// murcielagos main
// this routines are for this game only, can be used for other games by adaptation.

double lv1_batpos []= {-3287,-3156,-1851,-1643};                                         // pos in world cord y
double lv1_batpos_spr []= {-2704,-1380};
double lv1_batpos_spl []= {-2640,-1488};
double lv1_batpos_zz []= {-2500,-2300,-2148,-938,-804,-627};

void crea_bats()
{
    for (int i=0;i<6;i++)                                                       // prepara el array de los bats 6 al mismo tiempo
    {
        batss[i].activo=false;                                                   // desactiva todos los sprites
        batss_spl[i].activo=false; 
        batss_spr[i].activo=false; 
        batss_zz[i].activo=false; 
    }
     bats.alpha=255;                                                            // fija el nivel de alpha
     bats.createxturas("sprites/bats.dat");
     bats.x=300;
     bats.y=120;
     bats.animstart=0;
     bats.animpos=0;
     bats.animspeed=25;
     bats.animcount=2;
     bats.escala=1.0;
} 
void pinta_bats(double mappos,double *batarray,int size)
{
    /* crea */
    for (int r=0;r<size;r++)
     if (mappos==batarray[r])                                                      // crea un enemigo en esta posicion
      for (int i=0;i<6;i++)                                                      // create six bats from y array pos
        if (batss[i].activo==false)                                                     // if y= -63 lets create
        {
          batss[i].activo=true;
          batss[i].y=-(i)*10;                                                   // y : Start in -y
          batss[i].x=0; 
        }

    /* mueve */
    for (int i=5;i>-1;i--) // pinta de abajo a arriba
     if (batss[i].activo==true) // if is biger sprite is active
      {
       if (is_game_stop==false) 
        {
         batss[i].y+=0.6;                                          // calcula la nueva posicion de y
         batss[i].x=(340*cos((batss[i].y)*(PI/110))+340)+70;      // calcula la nueva posicion de x
        } 
        if (batss[i].y>480.0 && batss[i].activo==true) 
        {
            batss[i].activo=false;                          // desactiva si se sale de la pantalla
            continue;                                       // no pinta , no comprueba
        }
        bats.y=batss[i].y;                                  // actualiza coordenadas
        bats.x=batss[i].x;                                  //
        bats.alpha=255;
        bats.escala=1.0;
        bats.pinta();                                        // pinta el sprite
        bats.anima();                                        // anima el sprite
        if (bats.collision (&popolon.rect))
          if (is_popolon_fire==true) 
             { 
              for (int b=0;b<128;b++) 
                 if (rass[b].activo==false)                                         // busca uno que no este activo 
                    {
                        rass[b].activo=true;                                           // lo activa
                        rass[b].y=int(batss[i].y);                              // ras y position = arrowposy- sprite.h
                        rass[b].x=int(batss[i].x);                              // x
                        break;
                     }
                Sras.play();
                puntos+=100;
                batss[i].activo=false;
              }
            else
            {
             vidas=6;   // le quitamos una vida a popolon.
            } 
    }
}

void pinta_bats_zz(double mappos,double *batarray,int size)                                               // en zig zag      
{
    /* crea */
    for (int r=0;r<size;r++)
    if (mappos==batarray[r])                                                      // crea un enemigo en esta posicion
     for (int i=0;i<6;i++)                                                      // create six bats from y array pos
      if (batss_zz[i].activo==false)                                                     // if y= -63 lets create
       {
         batss_zz[i].activo=true;
         batss_zz[i].y=(i)*-32;                                                   // y : Start in -y
         batss_zz[i].x=0;                                                         // x
       }                        
    /* mueve */
    for (int i=5;i>-1;i--) // pinta de abajo a arriba
     if (batss_zz[i].activo==true) // if is biger sprite is active
      { 
       if (is_game_stop==false) 
          {
           batss_zz[i].y+=0.5;                                                  // calcula la nueva posicion de y
           batss_zz[i].x=(300*cos((batss_zz[i].y)*(PI/30))+300);                // calcula la nueva posicion de x
          } 
         if (batss_zz[i].y>480) 
         {
                batss_zz[i].activo=false;                // comprueba si se sale de la pantalla
                continue;
         }
         bats.y=batss_zz[i].y;                                  // actualiza coordenadas
         bats.x=batss_zz[i].x;                                  //
         bats.alpha=255;
         bats.escala=1.0;
         bats.pinta();                                        // pinta el sprite
         bats.anima();                                        // anima el sprite
         if (bats.collision(&popolon.rect))
          if (is_popolon_fire==true) 
            {
                for (int b=0;b<128;b++) 
                 if (rass[b].activo==false)                                         // busca uno que no este activo 
                    {
                        rass[b].activo=true;                                           // lo activa
                        rass[b].y=int(batss_zz[i].y);                                // ras y position = arrowposy- sprite.h
                        rass[b].x=int(batss_zz[i].x);                                 // x
                        break;
                     }
                Sras.play();
                puntos+=100;
                batss_zz[i].activo=false;
            }
            else
            {
             vidas=6;   // le quitamos una vida a popolon.
            }   
      }
}

void pinta_bats_spl(double mappos,double *batarray,int size)
{
   
    /* crea */
    for (int i=0;i<size;i++)
    if (mappos==batarray[i])                                                      // crea un enemigo en esta posicion
     for (int i=0;i<6;i++)                                                      // create six bats from y array pos
      if (batss_spl[i].activo==false)                                                     // if y= -63 lets create
       {
         batss_spl[i].activo=true;
         batss_spl[i].y=-(i)*32;                                                   // y : Start in -y
         batss_spl[i].x=0;                                                         // x
       }                        
    /* mueve */
    for (int i=5;i>-1;i--)      // pinta de abajo a arriba
     if (batss_spl[i].activo==true) // if is biger sprite is active
      {
       if (bats.collision(&popolon.rect))
         if (is_popolon_fire==true) 
            {
                for (int b=0;b<128;b++) 
                 if (rass[b].activo==false)                                         // busca uno que no este activo 
                    {
                        rass[b].activo=true;                                           // lo activa
                        rass[b].y=int(batss_spl[i].y);                                // ras y position = arrowposy- sprite.h
                        rass[b].x=int(batss_spl[i].x);                                 // x
                        break;
                     }
                Sras.play();
                puntos+=100;
                batss_spl[i].activo=false;
            }
            else
            {
             vidas=6;   // le quitamos una vida a popolon.
            }   

       if (is_game_stop==false) 
        {
         batss_spl[i].y+=2.6;                                          // calcula la nueva posicion de y
         batss_spl[i].x= (-50 *sin(batss_spl[i].y*PI / -300))+100; ///**(340*cos((batss[i][1])*(PI/110))+340)+70;      // calcula la nueva posicion de x
        } 
       if (batss_spl[i].y>480) 
        {
            batss_spl[i].activo=false;                // comprueba si se sale de la pantalla
            continue;
        }
       bats.y=batss_spl[i].y;                                  // actualiza coordenadas
       bats.x=batss_spl[i].x;                                  //
       bats.alpha=255;
       bats.escala=1.0;
       bats.pinta();                                        // pinta el sprite
       bats.anima();                                        // anima el sprite
       if (bats.collision(&popolon.rect))
         if (is_popolon_fire==true) 
            {
                for (int b=0;b<128;b++) 
                 if (rass[b].activo==false)                                         // busca uno que no este activo 
                    {
                        rass[b].activo=true;                                           // lo activa
                        rass[b].y=int(batss_spl[i].y);                                // ras y position = arrowposy- sprite.h
                        rass[b].x=int(batss_spl[i].x);                                 // x
                        break;
                     }
                Sras.play();
                puntos+=100;
                batss_spl[i].activo=false;
            }
            else
            {
             vidas=6;   // le quitamos una vida a popolon.
            }   
      }
}

void pinta_bats_spr(double mappos,double *batarray,int size)                                             // media luna 
{
   
    /* crea */
    for (int r=0;r<size;r++)
    if (mappos==batarray[r])                                                      // crea un enemigo en esta posicion
     for (int i=0;i<6;i++)                                                      // create six bats from y array pos
      if (batss_spr[i].activo==false)                                                     // if y= -63 lets create
       {
         batss_spr[i].activo=true;
         batss_spr[i].y=-(i)*32;                                                   // y : Start in -y
         batss_spr[i].x=0;                                                         // x
       }                        
    /* mueve */
    for (int i=5;i>-1;i--)
     if (batss_spr[i].activo==true) // if is biger sprite is active
      {
   

       if (is_game_stop==false) 
       {
         batss_spr[i].y+=2.6;                                          // calcula la nueva posicion de y
         batss_spr[i].x= (50 *sin(batss_spr[i].y*PI / -300))+550; ///**(340*cos((batss[i][1])*(PI/110))+340)+70;      // calcula la nueva posicion de x
       } 
       if (batss_spr[i].y>480.0) 
       {
            batss_spr[i].activo=false;                                // desactiva sprite si se sale de la pantalla
            continue;
       }
        bats.y=batss_spr[i].y;                                  // actualiza coordenadas
        bats.x=batss_spr[i].x;                                  //
        bats.alpha=255;
        bats.escala=1.0;
        bats.pinta();                                        // pinta el sprite
        bats.anima();                                        // anima el sprite
        if (bats.collision(&popolon.rect))
         if (is_popolon_fire==true) 
            {
                for (int b=0;b<128;b++) 
                 if (rass[b].activo==false)                                         // busca uno que no este activo 
                    {
                        rass[b].activo=true;                                           // lo activa
                        rass[b].y=int(batss_spr[i].y);                                // ras y position = arrowposy- sprite.h
                        rass[b].x=int(batss_spr[i].x);                                 // x
                        break;
                     }
                Sras.play();
                puntos+=100;
                batss_spr[i].activo=false;
            }
            else
            {
             vidas=6;   // le quitamos una vida a popolon.
            }
      }
}

